package com.weavernorth.retailExperienceAward.service;

import com.google.gson.JsonObject;
import com.weavernorth.util.Logger4jUtil;
import com.weavernorth.util.dateUtils;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.workflow.webservices.*;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author: bruseewang
 * @Package: com.weavernorth.retailExperienceAward.service
 * @date: 2020/5/28 11:04
 * @description: 定时任务：创建月度营运检查清单流程
 */
public class OperationCheckImpl implements OperationCheck {
//    private static Log log=LogFactory.getLog(OperationCheckImpl.class);
    public Logger log;
    public Logger getLog() {
        return log;
    }
    public void setLog(Logger log) {
        this.log = log;
    }
    @Override
    public void createFormal() {
        RecordSet rs_jcr=new RecordSet();
        RecordSet rs_detail=new RecordSet();
        //基础类
        BaseBean bb = new BaseBean();
        //1.存储检查清单
        JSONArray jsonArray=new JSONArray();
        //SELECT b.ID,c.ZBFL 指标分类,c.ID 检查指标ID,c.DFZB 检查指标名称,b.ZBBH 检查指标编号,b.px 排序 FROM uf_yybzjcqd a,uf_yybzjcqd_dt1 b,UF_YYZBXX_PP C WHERE a.id=b.MAINID AND b.ZBBH=c.ZBBM;
        String strSqls="SELECT a.id as yybzid,b.ID,c.ZBFL,c.DFZB,b.ZBBH,b.px,c.ID jczbID FROM uf_yybzjcqd a,uf_yybzjcqd_dt1 b,UF_YYZBXX_PP C WHERE a.id=b.MAINID AND b.ZBBH=c.ZBBM order by b.px asc";
        rs_detail.executeQuery(strSqls);
        log.info("店铺营运-遍历明细信息SQL："+strSqls);
        String str_yybz_id="";
        while (rs_detail.next()){
            JSONObject jsonObject=new JSONObject();
            String strZBFL=Util.null2String(rs_detail.getString("ZBFL"));//指标分类
            jsonObject.put("zbfl",strZBFL);
            String strJczbID=Util.null2String(rs_detail.getString("jczbID"));//检查指标ID
            jsonObject.put("jczb",strJczbID);
            String strFS=Util.null2String(rs_detail.getString("ZBBH"));//指标编号
            jsonObject.put("zbbm",strFS);
            String strPx=Util.null2String(rs_detail.getString("px"));//排序
            jsonObject.put("px",strPx);
            str_yybz_id=Util.null2String(rs_detail.getString("yybzid"));//营运标准检查清单id
            jsonArray.add(jsonObject);

        }
        //获取主表,添加配置文件，配置流程id
        String strTable = bb.getPropValue("retailExperience", "ydyyTable");
        log.info("流程表名：" + strTable);
        String strKhzq=Util.null2String(dateUtils.previousMonth(0));
        //2.遍历店铺表,获取所有的分公司,店铺和检查人
        //change:只取店铺级别为A,A+,B,C,D的
        String strSql1="select  a.fgs,a.dpbh,a.dp,TO_CHAR(a.qyjl) qyjl from uf_dpxx a,uf_cfdplstykh b,hrmresource c where c.id=TO_CHAR(a.qyjl) and a.FGS=b.fgsppdy and a.dpzt=0 AND TO_CHAR(a.qyjl) is not null " +
                " and a.dp is not null  and a.dpjb in(0,1,2,3,4) AND NOT EXISTS(SELECT 1 FROM uf_yddpzxygxxd d WHERE a.fgs=d.fgs AND a.dp=d.dp and d.khzq='"+strKhzq+"') AND NOT EXISTS (SELECT main.* FROM "+strTable+" main WHERE main.dp=a.DP and main.khzq='"+strKhzq+"')"+"GROUP BY a.fgs,a.dpbh,a.dp,TO_CHAR(a.qyjl)";
        log.info("店铺营运：获取店铺表中分公司,店铺,区域经理......");
        rs_jcr.executeQuery(strSql1);
        while (rs_jcr.next()){
            //获取分公司的值
            String strFgs = Util.null2String(rs_jcr.getString("fgs"));
            log.info("分公司的值：" + strFgs);
            //获取区域经理
            String strQyjl = Util.null2String(rs_jcr.getString("qyjl"));
            log.info("区域经理的值：" + strQyjl);
            String strDpbh=Util.null2String(rs_jcr.getString("dpbh"));
            log.info("店铺编号："+strDpbh);
            String strDpId=Util.null2String(rs_jcr.getString("dp"));
            log.info("店铺id："+strDpId);
            //创建流程的主表
            //存放主表字段的数组
            WorkflowRequestTableField[] wrMain = new WorkflowRequestTableField[7];
            //流程编号
            log.info("流程编号：");
            wrMain[0]=new WorkflowRequestTableField();
            wrMain[0].setFieldName("lcbh");//数据库中流程编号对应的字段
            wrMain[0].setFieldValue(Util.null2String(""));
            wrMain[0].setView(true);
            wrMain[0].setEdit(true);
            wrMain[0].setFieldOrder(0);
            wrMain[0].setMand(false);
            //添加店铺运营检查清单字段

            //初始化字段
            wrMain[1]=new WorkflowRequestTableField();
            wrMain[1].setFieldName("dpyyjcqd");
            wrMain[1].setFieldValue(Util.null2String(str_yybz_id));
            wrMain[1].setView(true);
            wrMain[1].setEdit(true);
            wrMain[1].setFieldOrder(0);
            wrMain[1].setMand(false);
            log.info("店铺运营检查清单："+str_yybz_id);

            //获取当前日期
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
            String strJcrq=df.format(new Date());
            //添加检查日期字段
            log.info("店铺营运-检查日期："+strJcrq);
            //初始化字段
            wrMain[2]=new WorkflowRequestTableField();
            wrMain[2].setFieldName("jcrq");
            wrMain[2].setFieldValue(strJcrq);
            wrMain[2].setView(true);
            wrMain[2].setEdit(true);
            wrMain[2].setFieldOrder(0);
            wrMain[2].setMand(false);

            //添加考核周期字段
            log.info("店铺营运-考核周期：");
            //初始化字段
            wrMain[3]=new WorkflowRequestTableField();
            wrMain[3].setFieldName("khzq");
            wrMain[3].setFieldValue(Util.null2String(dateUtils.previousMonth(0)));
            wrMain[3].setView(true);
            wrMain[3].setEdit(true);
            wrMain[3].setFieldOrder(0);
            wrMain[3].setMand(false);

            //添加店铺字段
            log.info("店铺营运-店铺：" + strDpbh);
            //初始化字段
            wrMain[4]=new WorkflowRequestTableField();
            wrMain[4].setFieldName("dp");
            wrMain[4].setFieldValue(strDpId);
            wrMain[4].setView(true);
            wrMain[4].setEdit(true);
            wrMain[4].setFieldOrder(0);
            wrMain[4].setMand(false);

            //添加区域经理字段
            log.info("店铺营运-添加区域经理：" + strQyjl);
            //初始化字段
            wrMain[5]=new WorkflowRequestTableField();
            //区域经理-字段映射
            wrMain[5].setFieldName("jcr");//数据库中分公司对应的字段
            //属性赋值
            wrMain[5].setFieldValue(Util.null2String(strQyjl));
            wrMain[5].setView(true);
            wrMain[5].setEdit(true);
            wrMain[5].setFieldOrder(0);
            wrMain[5].setMand(false);

            log.info("店铺营运-总分数");
            wrMain[6]=new WorkflowRequestTableField();
            wrMain[6].setFieldName("zfs");
            wrMain[6].setView(true);
            wrMain[6].setEdit(true);
            wrMain[6].setFieldOrder(0);
            wrMain[6].setMand(false);
            //填装主表信息
            WorkflowRequestTableRecord[] wrtri = new WorkflowRequestTableRecord[1];
            wrtri[0] = new WorkflowRequestTableRecord();
            wrtri[0].setWorkflowRequestTableFields(wrMain);
            WorkflowMainTableInfo wmi = new WorkflowMainTableInfo();
            wmi.setRequestRecords(wrtri);


            //基本信息
            WorkflowBaseInfo wbi = new WorkflowBaseInfo();
            //获取workflowid,添加配置文件，配置流程id
            String workflowid = bb.getPropValue("retailExperience","monthFlowId");
            log.info("workflowid的值：" + workflowid);
            wbi.setWorkflowId(workflowid);

            WorkflowRequestInfo wrInfo = new WorkflowRequestInfo();
            wrInfo.setCreatorId("01");
            wrInfo.setRequestLevel("0");//紧急程度
            wrInfo.setRequestName("品牌-店铺月度营运标准检查清单申请流程");//请求的名称
            //停留在提交节点
            wrInfo.setIsnextflow("0");
            //主表数据
            wrInfo.setWorkflowMainTableInfo(wmi);
            wrInfo.setWorkflowBaseInfo(wbi);

            //明细表
            WorkflowDetailTableInfo wdti[] = new WorkflowDetailTableInfo[1];
            //限定明细表的长度
            wrtri = new WorkflowRequestTableRecord[jsonArray.size()];
            wdti = getDetail(jsonArray, wdti, wrtri);
            wrInfo.setWorkflowDetailTableInfos(wdti);
            wrInfo.setCreatorId(strQyjl);

            WorkflowServiceImpl wfsi = new WorkflowServiceImpl();
            String requestid = wfsi.doCreateWorkflowRequest(wrInfo, Integer.parseInt(strQyjl));
            log.info("店铺营运-批量生成流程返回值==" + requestid);
            if (strQyjl.equals(strQyjl)) {
                if (!"".equals(requestid) && Integer.parseInt(requestid) > 0) {
                   log.info("流程创建成功！");
                } else {
                    log.info("流程创建失败！");
                }
            }
        }
        //2.设置主表标题,流程编号,检查日期,店铺,检查人,店铺运营检查清单

    }

    /**
     * 封装明细数据
     */

    public WorkflowDetailTableInfo[] getDetail(JSONArray jsonArray, WorkflowDetailTableInfo[] wdti, WorkflowRequestTableRecord[] wrtri) {

        for (int i = 0; i < jsonArray.size(); i++) {

            JSONObject jsonObject =jsonArray.getJSONObject(i);
            log.info("封装明细json:"+jsonObject);
            try{
                //有8个字段长度为8
                WorkflowRequestTableField[] wrti = new WorkflowRequestTableField[6];

                //添加指标编码字段

                wrti[0] = new WorkflowRequestTableField();
                //字段在数据库中的字段名
                wrti[0].setFieldName("zbbm");
                //赋值
                wrti[0].setFieldValue(jsonObject.getString("zbbm"));
                wrti[0].setView(true);
                wrti[0].setEdit(true);

                //添加指标分类字段

                wrti[1] = new WorkflowRequestTableField();
                //字段在数据库中的字段名
                wrti[1].setFieldName("zbfl");
                //赋值
                wrti[1].setFieldValue(jsonObject.getString("zbfl"));
                wrti[1].setView(true);
                wrti[1].setEdit(true);

                //添加检查指标ID字段

                wrti[2] = new WorkflowRequestTableField();
                //字段在数据库中的字段名
                wrti[2].setFieldName("jczb");
                //赋值
                wrti[2].setFieldValue(jsonObject.getString("jczb"));
                wrti[2].setView(true);
                wrti[2].setEdit(true);

                //添加是否得分字段
//
                wrti[3] = new WorkflowRequestTableField();
                //字段在数据库中的字段名
                wrti[3].setFieldName("sfmf");
                //赋值：0：得分,1:全部扣除
                wrti[3].setFieldValue("0");
                wrti[3].setView(true);
                wrti[3].setEdit(true);
//
//                //添加分数小计字段
                wrti[4] = new WorkflowRequestTableField();
                //字段在数据库中的字段名
                wrti[4].setFieldName("fs");
                //赋值
                wrti[4].setFieldValue("2");
                wrti[4].setView(true);
                wrti[4].setEdit(true);
//
//              //添加排序字段
                wrti[5] = new WorkflowRequestTableField();
                //字段在数据库中的字段名
                wrti[5].setFieldName("px");
                //赋值
                wrti[5].setFieldValue(jsonObject.getString("px"));
                wrti[5].setView(true);
                wrti[5].setEdit(true);

                wrtri[i] = new WorkflowRequestTableRecord();
                wrtri[i].setWorkflowRequestTableFields(wrti);
            }catch (Exception ex){
                log.info("封装明细表数据出现异常,异常信息："+ex.toString());
            }


        }
        wdti[0] = new WorkflowDetailTableInfo();
        wdti[0].setWorkflowRequestTableRecords(wrtri);
        return wdti;

    }

}
